﻿Public Class ABM_Empleado
    Dim acceso As New acceso
    Dim comando As New SqlClient.SqlCommand
    Dim esnuevo As Boolean
    Dim empleado As New Empleado()




    Private Sub ABM_Empleado_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        habilitacion(True)
        cargarGrilla()
        blanquear()
        esnuevo = True
        acceso.cargarCombo(cmb_tipoDoc, "TipoDocumento", "nombre", "idTipoDocumento")
        acceso.cargarCombo(cmb_provincia, "Provincia", "nombre", "idProvincia")
        cmb_provincia.SelectedValue = 6
        txt_nombre.Focus()

    End Sub
    Private Sub habilitacion(ByVal x As Boolean)
        DatosEmpleado.Enabled = x
        btn_eliminar.Enabled = x
        btn_guardar.Enabled = x

    End Sub
    Private Sub btn_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_salir.Click
        If MessageBox.Show("¿ Desea salir del ABM de Empleados ?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            Me.Close()
        End If
    End Sub
    Private Sub blanquear()
        txt_nombre.Text = ""
        txt_apellido.Text = ""
        txt_email.Text = ""
        msk_nroDoc.Text = ""
        txt_calle.Text = ""
        msk_numeroCalle.Text = ""
        msk_piso.Text = ""
        txt_barrio.Text = ""
        txt_idDireccion.Text = ""
        txt_idEmpleado.Text = ""
        txt_idPersona.Text = ""
        txt_idTelefono.Text = ""
        cmb_tipoDoc.SelectedValue = 1
        cmb_provincia.SelectedValue = 6
        dgv_Telefonos.DataSource = ""
        If dgv_Empleados.SelectedRows.Count <> 0 Then
            dgv_Empleados.ClearSelection()
        End If



    End Sub
    Private Sub btn_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_nuevo.Click
        DatosEmpleado.Enabled = True
        blanquear()
        btn_guardar.Enabled = True
        txt_nombre.Focus()
        esnuevo = True
        

    End Sub

    Private Sub dgv_Empleados_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv_Empleados.Click
        If dgv_Empleados.SelectedRows.Count <> 0 Then
            txt_idEmpleado.Text = dgv_Empleados.SelectedRows(0).Cells("idEmpleado").Value.ToString
            txt_idPersona.Text = dgv_Empleados.SelectedRows(0).Cells("idPersona").Value
            txt_idDireccion.Text = dgv_Empleados.SelectedRows(0).Cells("idDireccion").Value

            txt_nombre.Text = dgv_Empleados.SelectedRows(0).Cells("nombre").Value.ToString
            txt_apellido.Text = dgv_Empleados.SelectedRows(0).Cells("apellido").Value.ToString
            cmb_tipoDoc.SelectedValue = dgv_Empleados.SelectedRows(0).Cells("idTipoDocumento").Value.ToString
            msk_nroDoc.Text = dgv_Empleados.SelectedRows(0).Cells("documento").Value
            txt_email.Text = dgv_Empleados.SelectedRows(0).Cells("email").Value
            txt_barrio.Text = dgv_Empleados.SelectedRows(0).Cells("barrio").Value
            txt_calle.Text = dgv_Empleados.SelectedRows(0).Cells("calle").Value
            msk_numeroCalle.Text = dgv_Empleados.SelectedRows(0).Cells("numero").Value
            msk_piso.Text = dgv_Empleados.SelectedRows(0).Cells("piso").Value
            txt_depto.Text = dgv_Empleados.SelectedRows(0).Cells("departamento").Value

            cmb_provincia.SelectedValue = dgv_Empleados.SelectedRows(0).Cells("idProvincia").Value
            cmb_localidad.SelectedValue = dgv_Empleados.SelectedRows(0).Cells("idLocalidad").Value
            esnuevo = False
            cargarGrillaTelefonos()
        End If
        
    End Sub

    Private Sub cargarGrillaTelefonos()
        Dim tabla As New Data.DataTable()
        If txt_idPersona.Text = "" Then
            tabla = acceso.ejecutar("Select * FROM Vista_Telefonos Where idPersona is null")
        Else
            tabla = acceso.ejecutar("Select * FROM Vista_Telefonos Where idPersona = " & txt_idPersona.Text)
        End If
        dgv_Telefonos.DataSource = tabla
        acomodarGrillaTelefonos()

    End Sub
    Private Sub acomodarGrillaTelefonos()
        dgv_Telefonos.Columns("numero").HeaderText = "Telefono"
        dgv_Telefonos.Columns("numero").Width = 70
        dgv_Telefonos.Columns("nombre").HeaderText = "Tipo Telefono"
        dgv_Telefonos.Columns("nombre").Width = 100
        dgv_Telefonos.Columns("idTelefono").Visible = False
        dgv_Telefonos.Columns("idPersona").Visible = False
        dgv_Telefonos.Columns("idTipoTelefono").Visible = False
    End Sub

    Private Sub cmb_provincia_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_provincia.SelectedIndexChanged
        If cmb_provincia.SelectedIndex <> 0 Then
            cargaLocalidades(cmb_provincia.SelectedValue)
        End If
    End Sub
    Private Sub cargarGrilla()

        Dim tabla As New Data.DataTable()
        tabla = acceso.leo_tabla("VistaEmpleados")
        dgv_Empleados.DataSource = tabla
        acomodarGrilla()
    End Sub
    Private Sub acomodarGrilla()
        dgv_Empleados.Columns("idEmpleado").HeaderText = "Nº Empleado"
        dgv_Empleados.Columns("nombre").HeaderText = "Nombre"
        dgv_Empleados.Columns("apellido").HeaderText = "Apellido"
        dgv_Empleados.Columns("tipoDoc").HeaderText = "Tipo Documento"
        dgv_Empleados.Columns("documento").HeaderText = "Nº Documento"
        dgv_Empleados.Columns("email").HeaderText = "Email"
        dgv_Empleados.Columns("barrio").HeaderText = "Barrio"
        dgv_Empleados.Columns("calle").HeaderText = "Calle"
        dgv_Empleados.Columns("numero").HeaderText = "Numero"
        dgv_Empleados.Columns("piso").HeaderText = "Piso"
        dgv_Empleados.Columns("departamento").HeaderText = "Depto"
        dgv_Empleados.Columns("localidad").HeaderText = "Localidad"
        dgv_Empleados.Columns("provincia").HeaderText = "Provincia"
        dgv_Empleados.Columns("idEmpleado").Width = 80
        dgv_Empleados.Columns("tipoDoc").Width = 50
        dgv_Empleados.Columns("documento").Width = 80
        dgv_Empleados.Columns("numero").Width = 40
        dgv_Empleados.Columns("piso").Width = 30
        dgv_Empleados.Columns("departamento").Width = 50
        dgv_Empleados.Columns("idTipoDocumento").Visible = False
        dgv_Empleados.Columns("idLocalidad").Visible = False
        dgv_Empleados.Columns("idProvincia").Visible = False
        dgv_Empleados.Columns("idPersona").Visible = False
        dgv_Empleados.Columns("idDireccion").Visible = False
    End Sub


    Private Sub cargaLocalidades(ByVal idProvincia As String)

        cmb_localidad.DataSource = acceso.ejecutar("SELECT * FROM Localidad WHERE idProvincia = " + idProvincia + "Order by nombre")
        cmb_localidad.DisplayMember = "nombre"
        cmb_localidad.ValueMember = "idLocalidad"

    End Sub

    Private Sub btn_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_guardar.Click
        If txt_nombre.Text = "" Then
            MessageBox.Show("El campo Nombre no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_nombre.Focus()
            Return
        End If
        If txt_apellido.Text = "" Then
            MessageBox.Show("El campo Apellido no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_apellido.Focus()
            Return
        End If
        If msk_nroDoc.Text = "" Then
            MessageBox.Show("El campo Número de Documento no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            msk_nroDoc.Focus()
            Return
        End If
        If txt_email.Text = "" Then
            MessageBox.Show("El campo Email no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_email.Focus()
            Return
        End If
        If cmb_localidad.SelectedIndex = -1 Then
            MessageBox.Show("Debe seleccionar alguna Localidad", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            cmb_localidad.Focus()
            Return
        End If
        If txt_barrio.Text = "" Then
            MessageBox.Show("El campo Barrio no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_barrio.Focus()
            Return
        End If
        If txt_calle.Text = "" Then
            MessageBox.Show("El campo Calle no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_calle.Focus()
            Return
        End If
        If msk_numeroCalle.Text = "" Then
            MessageBox.Show("El campo Nro. no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            msk_numeroCalle.Focus()
            Return
        End If
        'If msk_piso.Text = "" Then
        '    MessageBox.Show("El campo Piso no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        '    msk_piso.Focus()
        '    Return
        'End If

        empleado._nombre = txt_nombre.Text
        empleado._apellido = txt_apellido.Text
        empleado._tipoDocumento._idTipoDocumento = Int(cmb_tipoDoc.SelectedValue)
        empleado._documento = msk_nroDoc.Text
        empleado._email = txt_email.Text
        empleado._direccion._calle = txt_calle.Text
        empleado._direccion._numero = msk_numeroCalle.Text
        empleado._direccion._barrio = txt_barrio.Text
        If msk_piso.Text = "" Then
            empleado._direccion._piso = 0
        Else
            empleado._direccion._piso = msk_piso.Text
        End If

        empleado._direccion._departamento = txt_depto.Text
        empleado._direccion._localidad._idLocalidad = Int(cmb_localidad.SelectedValue.ToString)
        empleado._direccion._localidad._provincia._idProvincia = Int(cmb_provincia.SelectedValue.ToString)

        If esnuevo = True Then
            insertEmpleado(empleado)
            MessageBox.Show("Nuevo Empleado cargado con exito", "ATENCION", MessageBoxButtons.OK, MessageBoxIcon.None)
            cargarGrilla()
            blanquear()
        Else
            empleado._idEmpleado = txt_idEmpleado.Text
            empleado._direccion._idDireccion = txt_idDireccion.Text
            empleado._idPersona = txt_idPersona.Text
            updateEmpleado(empleado)
            MessageBox.Show("Empleado actualizado con exito", "ATENCION", MessageBoxButtons.OK, MessageBoxIcon.None)
            cargarGrilla()
            blanquear()
        End If
    End Sub

    'Public Sub updateEmpleado(ByVal empleado As Empleado)
    '    Dim sql As String
    '    sql = "UPDATE Producto SET nombre = @nombre, descripcion = @descripcion, stockRiesgo = @stockRiesgo"
    '    sql &= ", precio = @precio, idUnidad = @unidad, idTipoProducto = @tipoProducto, idMarca = @marca where codProducto = @codProducto"
    '    comando = New Data.SqlClient.SqlCommand
    '    comando.Parameters.AddWithValue("@nombre", producto._nombre)
    '    comando.Parameters.AddWithValue("@descripcion", producto._descripcion)
    '    comando.Parameters.AddWithValue("@stockRiesgo", producto._stockRiesgo)
    '    comando.Parameters.AddWithValue("@precio", producto._precio)
    '    comando.Parameters.AddWithValue("@unidad", producto._Unidad._idUnidadMedida)
    '    comando.Parameters.AddWithValue("@tipoProducto", producto._tipoProducto._idTipoProducto)
    '    comando.Parameters.AddWithValue("@marca", producto._marca._idMarca)
    '    comando.Parameters.AddWithValue("@codProducto", producto._codProducto)
    '    acceso.ejecutarActualizaciones(sql, comando)
    'End Sub
 

    Public Sub insertEmpleado(ByVal empleado As Empleado)
        Dim sql As String
        Dim tabla As Data.DataTable
        'Creo cadena de insercion para cargar la tabla Direccion
        sql = "Insert INTO Direccion (calle,numero,idLocalidad,barrio,piso,departamento)"
        sql &= " VALUES (@calle,@numero,@idLocalidad,@barrio,@piso,@departamento)"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@calle", empleado._direccion._calle)
        comando.Parameters.AddWithValue("@numero", empleado._direccion._numero)
        comando.Parameters.AddWithValue("@idLocalidad", empleado._direccion._localidad._idLocalidad)
        comando.Parameters.AddWithValue("@barrio", empleado._direccion._barrio)
        comando.Parameters.AddWithValue("@piso", empleado._direccion._piso)
        comando.Parameters.AddWithValue("@departamento", empleado._direccion._departamento)
        acceso.ejecutarActualizaciones(sql, comando)

        'Creo cadena de insercion para cargar la tabla Persona
        tabla = acceso.ejecutar("SELECT * FROM Direccion WHERE IdDireccion = IDENT_CURRENT('Direccion')")
        Dim idDireccion As String = tabla.Rows.Item(0).Item(0).ToString()
        sql = "Insert INTO Persona (nombre,apellido,email,documento,idTipoDocumento,idDireccion)"
        sql &= " VALUES (@nombre , @apellido ,@email,@documento,@idTipoDocumento, @idDireccion)"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@nombre", empleado._nombre)
        comando.Parameters.AddWithValue("@apellido", empleado._apellido)
        comando.Parameters.AddWithValue("@email", empleado._email)
        comando.Parameters.AddWithValue("@documento", empleado._documento)
        comando.Parameters.AddWithValue("@idTipoDocumento", empleado._tipoDocumento._idTipoDocumento)
        comando.Parameters.AddWithValue("@idDireccion", idDireccion)
        acceso.ejecutarActualizaciones(sql, comando)

        'Creo cadena de insercion para cargar la tabla Telefono
        tabla = acceso.ejecutar("SELECT * FROM Persona WHERE IdPersona = IDENT_CURRENT('Persona')")
        Dim idPersona As String = tabla.Rows.Item(0).Item(0).ToString()
        sql = "UPDATE Telefono SET idPersona = @idPersona where idPersona is NULL"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@idPersona", idPersona)
        acceso.ejecutarActualizaciones(sql, comando)

        'Creo cadena de insercion para cargar la tabla Empleado
        tabla = acceso.ejecutar("SELECT * FROM Persona WHERE IdPersona = IDENT_CURRENT('Persona')")
        sql = "Insert INTO Empleado (idPersona)"
        sql &= " VALUES (@idPersona)"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@idPersona", idPersona)
        acceso.ejecutarActualizaciones(sql, comando)
    End Sub

    Public Sub updateEmpleado(ByVal empleado As Empleado)
        Dim sql As String

        sql = "UPDATE Persona SET nombre = @nombre,apellido = @apellido,email = @email,documento = @documento,idTipoDocumento = @idTipoDocumento,idDireccion = @idDireccion where idPersona=@idPersona"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@idPersona", empleado._idPersona.ToString)
        comando.Parameters.AddWithValue("@nombre", empleado._nombre)
        comando.Parameters.AddWithValue("@apellido", empleado._apellido)
        comando.Parameters.AddWithValue("@email", empleado._email)
        comando.Parameters.AddWithValue("@documento", empleado._documento)
        comando.Parameters.AddWithValue("@idTipoDocumento", empleado._tipoDocumento._idTipoDocumento)
        comando.Parameters.AddWithValue("@idDireccion", empleado._direccion._idDireccion)
        acceso.ejecutarActualizaciones(sql, comando)


        sql = "UPDATE Direccion SET calle = @calle,numero = @numero,idLocalidad = @idLocalidad,barrio = @barrio,piso = @piso,departamento = @departamento where idDireccion= @idDireccion"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@idDireccion", empleado._direccion._idDireccion.ToString)
        comando.Parameters.AddWithValue("@calle", empleado._direccion._calle)
        comando.Parameters.AddWithValue("@numero", empleado._direccion._numero)
        comando.Parameters.AddWithValue("@idLocalidad", empleado._direccion._localidad._idLocalidad)
        comando.Parameters.AddWithValue("@barrio", empleado._direccion._barrio)
        comando.Parameters.AddWithValue("@piso", empleado._direccion._piso)
        comando.Parameters.AddWithValue("@departamento", empleado._direccion._departamento)
        acceso.ejecutarActualizaciones(sql, comando)



    End Sub



    Private Sub btn_eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_eliminar.Click
        If dgv_Empleados.SelectedRows.Count <> 0 Then
            empleado._idEmpleado = dgv_Empleados.SelectedRows(0).Cells("idEmpleado").Value
            empleado._nombre = dgv_Empleados.SelectedRows(0).Cells("nombre").Value
            empleado._apellido = dgv_Empleados.SelectedRows(0).Cells("apellido").Value
            empleado._idPersona = dgv_Empleados.SelectedRows(0).Cells("idPersona").Value
            empleado._direccion._idDireccion = dgv_Empleados.SelectedRows(0).Cells("idDireccion").Value
            If MessageBox.Show("Esta seguro de querer eliminar el empleado: " & empleado._nombre & " " & empleado._apellido & vbLf & "con ID:" & empleado._idEmpleado _
            , "ATENCION", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
                Dim sql As String
                'AL ESTAR EN VARIAS TABLAS LOS VALORES DEEBEN ELIMIARSE EN CADA UNA POR SEPARADO Y EN ORDEM, 
                '1-EMPLEADO
                '2-TELEFONO
                '3-PERSONA
                '4-DIRECCION
                sql = "DELETE Empleado WHERE idEmpleado = @idEmpleado"
                comando = New Data.SqlClient.SqlCommand
                comando.Parameters.AddWithValue("@idEmpleado", empleado._idEmpleado)
                acceso.ejecutarActualizaciones(sql, comando)

                sql = "DELETE Telefono WHERE idPersona = @idPersona"
                comando = New Data.SqlClient.SqlCommand
                comando.Parameters.AddWithValue("@idPersona", empleado._idPersona)
                acceso.ejecutarActualizaciones(sql, comando)

                sql = "DELETE Persona WHERE idPersona = @idPersona"
                comando = New Data.SqlClient.SqlCommand
                comando.Parameters.AddWithValue("@idPersona", empleado._idPersona)
                acceso.ejecutarActualizaciones(sql, comando)

                sql = "DELETE Direccion WHERE idDireccion = @idDireccion"
                comando = New Data.SqlClient.SqlCommand
                comando.Parameters.AddWithValue("@idDireccion", empleado._direccion._idDireccion)
                acceso.ejecutarActualizaciones(sql, comando)

                cargarGrilla()
                blanquear()
                esnuevo = True

            End If

        End If
    End Sub




    Private Sub txt_depto_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_depto.KeyUp

        txt_depto.Text = txt_depto.Text.ToUpper
        txt_depto.Select(txt_depto.Text.Length, 0)
    End Sub









    Public Sub validarTextBox(ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Char.IsLetter(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If
    End Sub
    Private Sub txt_nombre_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_nombre.KeyPress
        validarTextBox(e)
    End Sub

    Private Sub txt_apellido_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_apellido.KeyPress
        validarTextBox(e)
    End Sub

    Private Sub txt_barrio_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_barrio.KeyPress
        validarTextBox(e)
    End Sub

    Private Sub txt_calle_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_calle.KeyPress
        validarTextBox(e)
    End Sub


    Private Sub btn_Telefonos_Click(sender As System.Object, e As System.EventArgs) Handles btn_Telefonos.Click
        Dim idPers As Integer
        If txt_idPersona.Text = "" Then
            idPers = Nothing
        Else
            idPers = txt_idPersona.Text
        End If
        Dim Telefonos As New ABM_Telefonos()
        Telefonos._idPersona = idPers
        Telefonos.ShowDialog()
        cargarGrillaTelefonos()
    End Sub

    Private Sub cmb_localidad_Leave(sender As System.Object, e As System.EventArgs) Handles cmb_localidad.Leave
        If cmb_localidad.SelectedIndex = -1 Then
            cmb_localidad.Focus()
        End If
    End Sub

    Private Sub cmb_provincia_Leave(sender As System.Object, e As System.EventArgs) Handles cmb_provincia.Leave
        If cmb_provincia.SelectedIndex = -1 Then
            cmb_provincia.Focus()
        End If
        If cmb_provincia.SelectedIndex <> -1 Then
            cargaLocalidades(cmb_provincia.SelectedValue)
        End If
    End Sub
End Class